package cn.yrec.rain.analysis.service;

import cn.yrec.rain.analysis.model.RaPDayRt;
import cn.yrec.rain.analysis.vo.RaPDayRtVo;
import cn.yrec.rain.analysis.vo.RainModel;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 描述:
 *  数据处理业务层
 * @createDate: 2023/03/31 0:12
 * @author: yanglichen
 */
public interface DataProcessService {

    /**
     * 方法描述: 查询站码列表对应的站码在小于某一个日期,降雨量<=降雨阈值的全部信息
     * 初步封装到List<Map<>>中,将在业务层转化为Map<>对象
     * @author yanglichen
     * @date 2023-03-31 00:13 
     * @param rainModel 降雨参数
     * @return 日期和对应天数的计数项
     **/
    Map<Date, Integer> getRainfallCountMap(RainModel rainModel);

    /**
     * 方法描述: 得到站码列表在起始日之前的所有的信息
     * 封装成Map(便于后续计算降雨特征值信息的检索)
     *
     * @param rainModel 降雨参数
     * @return 封装站码列表全部信息的Map
     * 例如:{站码1 = {日期1=雨量站全部信息实例1, 日期2=雨量站全部信息实例2...},
     * 站码2 = {日期1=雨量站全部信息实例1, 日期2=雨量站全部信息实例2...}....}
     * @author yanglichen
     * @date 2020-07-24 10:27
     **/
    Map<String, Map<Date, RaPDayRtVo>> getAllInformationMap(RainModel rainModel);

    /**
     * 方法描述: 根据开始时间，结束时间，站码列表，降雨阈值得到时间范围内的累计降雨量
     * @author yanglichen
     * @date 2023-08-21 11:05
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @param stcdList 站码列表
     * @param rainfallThreshold 降雨阈值
     * @return 有降雨的数据，其中rf 表示累计雨量
     **/
    List<RaPDayRt> getSumRainByStartDateEndDateStcdListAndRainThreshold(
            Date startDate, Date endDate, List<String> stcdList, Double rainfallThreshold);
}
